package controller.commoncontroller;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JOptionPane;

import locsi.UserSettings;
import model.editormodel.EditorModel;

/**
 * <b>Implementiert:</b> <code>ActionListener</code> <br>
 * <b>Erbt:</b> <code>WindowAdapter</code> <br>
 * <b>In Verbindung stehende Klassen:</b> <code>EditorModel</code><br>
 * <br>
 * Zugehoerige Controllerklasse zum Menueeintrag <i>Beenden</i> und zum
 * Schließen-Kreuz. Diese Klasse beendet das Programm. Der Benutzer wird
 * gefragt, ob die aktuelle Schaltung gespeichert werden soll oder nicht.
 * 
 * @author Team Locsi
 * 
 */
public class ExitListener extends WindowAdapter implements ActionListener {

	private EditorModel eModel;

	/**
	 * Dieser Konstruktor erzeugt ein neues <code>ExitListener</code> - Objekt.
	 * 
	 * @param eModel
	 *            <code>EditorModel</code> - Referenz auf das
	 *            <code>EditorModel</code>
	 */
	public ExitListener(EditorModel eModel) {
		this.eModel = eModel;
	}

	/**
	 * In dieser Methode wird das Programm beendet, falls der User den
	 * Menueeintrag <i>Beenden</i> ausgewaehlt hat. Zuvor wird der User gefragt,
	 * ob die aktuelle Schaltung, falls vorhanden, gespeichert werden soll.
	 */
	@Override
	public void actionPerformed(ActionEvent e) {
		closeLocsi();
	}

	/**
	 * Diese Methode beendet das Programm, falls der Benutzer auf den roten
	 * <i>Exit</i>-Button in der Titelleiste klickt. Zuvor wird der User
	 * gefragt, ob die aktuelle Schaltung, falls vorhanden, gespeichert werden
	 * soll.
	 */
	@Override
	public void windowClosing(WindowEvent e) {
		closeLocsi();
	}

	/**
	 * Diese Hilfsmethode beendet das Programm. Zuvor wird der User gefragt, ob
	 * die aktuelle Schaltung, falls vorhanden, gespeichert werden soll.
	 */
	private void closeLocsi() {
		UserSettings.writeSettingsFile();
		
		// speichern abfrage nur, falls schaltung nicht leer ist
		if (!eModel.isEmptyCircuit()) {
			
			// Gibt an, was User beim JDialog ausgewaehlt hat
			int askForSaveDialog = UtilityDialogs.askForSave(eModel,
					UtilityDialogs.XML_EXTENSION);

			// User bejaht oder verneint die Frage, ob die aktuelle Schaltung
			// gespeichert werden soll, bricht also nicht ab
			if ((askForSaveDialog == JOptionPane.OK_OPTION)
					|| (askForSaveDialog == JOptionPane.NO_OPTION)) {
				System.exit(0);
			}
		} else {
			System.exit(0);
		}
	}
}